Docker コンテナで動く Amazon Genomics CLI 実行環境の作り方紹介
Amazon Genomics CLI(agc
コマンド)の実行環境の作り方を紹介します。同じ実行環境を配布できるように実行環境は Docker コンテナを使用します。
Inventory icons created by Freepik - Flaticon
実行環境の構築に必要なファイル類
以下のリポジトリに保存してあります。M1 Mac(ARM)仕様の部分が一部ありますので x86-64 ユーザーが参考にされる場合は本文もご確認ください。
bigmuramura/container-genomics-cli: Running amazon genomics cli on Docker
コンテナへログインするまでの手順早見
docker-compose build --no-cache docker-compose up -d docker-compose exec agc bash
実行環境を作っていく
Amazon Genomics CLI の実行環境を作成するために確認するべきドキュメントは以下のリンクになります。以下のリンクの情報を元に Docker ファイを作成します。
以下の方針でコンテナ環境を作成します
- Amazon Genomics CLI のバージョン管理ができること
- Node.js のバージョン管理ができること
- Amazon Genomics CLI を実行するコンテナ内の作業で必要になりそうなコマンドも使えるようにしておく
- AWS CLI や、jq コマンドなど
コンテナイメージの選定
前提条件を確認し、特定の OS の中で Node.js のインストール必須でした。node のベースイメージで ubuntu / debian 系のイメージを使用しているものを採用しました。
node - Official Image | Docker Hub
Amazon Genomics CLI のアップデートにより、要求される Node.js のバージョンが上がれば node のベースイメージを変更して更新する運用にします。
Amazon Genomics CLI のバージョン選択
apt
コマンドなどのパッケージ管理コマンドでインストールできます。ですが、私の端末が M1 Mac(ARM)ということもありソースからビルドすることにしました。
Releases · aws/amazon-genomics-cli
最新のリリースバージョンのソースコードをダウンロードしてビルドする運用にしました。Amazon Genomics CLI のバージョン管理はここで行います。
その他あると便利なもの
Amazon Genomics CLI を使って作業しているとaws s3
コマンドを使いたい場面が訪れます。そのため AWS CLI コマンドを利用できるようにしておきます。あとは私がfish
シェルユーザーなのでfish
シェルを使えるようにします。
Docker ファイル作成
マルチステージビルドするつもりではじめたのですが思いの外ビルドするものがありませんでした。Amazon Genomics CLI のインストールは参考になるかと思いますのでお好みで変更してください。また、AWS CLI のソースコードは ARM 用のものをダウンロードしています。x86-64環境の場合は該当するソースコードをダウンロードするように変更してください。
Amazon Genomics CLI のコマンドことagc
コマンドは$HOME/bin
配下にインストールされます。ENV
でパスを通しておくと使い勝手が良くなります。
FROM debian:stable as builder WORKDIR /tmp RUN apt-get update && apt-get install -y \ curl \ unzip \ wget # AWS CLI v2(ARM版) のソースコードダウンロード RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip" RUN unzip awscliv2.zip # Amazon Genomics CLI のソースコードダウンロード RUN wget "https://github.com/aws/amazon-genomics-cli/releases/download/v1.6.0/amazon-genomics-cli-1.6.0.zip" -O "agc.zip" RUN unzip agc.zip RUN rm *.zip FROM node:19.8.1-buster-slim COPY --from=builder /tmp/ /tmp/ RUN /tmp/aws/install RUN /tmp/amazon-genomics-cli/install.sh RUN apt-get update && apt-get install -y \ git \ jq \ fish \ vim \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* ENV PATH $PATH:/root/bin RUN echo $PATH
docker-compose ファイル作成
込み入ったことはしていなく、Dockerfile の指定とカレントディレクトリを/workspase
としてコンテナ側にマウントして、ワークフロー定義で使用するディレクトリや、ファイルをローカルからとコンテナからどちらかもアクセスできるようにしてあります。
version: '3' services: agc: build: context: ./genomics-cli dockerfile: Dockerfile volumes: - .:/workspace:cached - ~/.aws:/root/.aws tty: true
genomics-cli
ディレクトリ配下にDockerfile
を保存しています。ディレクトリ構成やファイルはGitHub のリポジトリも参考にしてください。
. ├── docker-compose.yml └── genomics-cli └── Dockerfile
agc コマンドを使ってみる
Amazon Genomics CLI のバージョン変更で Dockerfile を変更することを考慮して--no-chache
オプションを付けた例を示します。ただし、ビルドに時間がかかるため必要ないときは--no-chache
を指定しない方が良いです。
docker-compose build --no-cache docker-compose up -d docker-compose exec agc bash
コンテナが正常にビルド、起動できれば以下の様なプロンプトが表示されます。
root@25df23063fa9:/#
agc
コマンドが利用できるか、パスは通っているか確認するためにagc --version
でバージョン情報が返ってくるかチェックしましょう。
# agc --version agc version: 1.6.0 # aws --version aws-cli/2.11.4 Python/3.11.2 Linux/5.15.78-0-virt exe/aarch64.debian.10 prompt/off
agc
コマンドで AWS 環境を操作するにはコンテナ内から AWS アカウントへの認証情報が必要になります。私は Assume Role で一時的な権限を取得してコンテナ内に貼り付けて利用しています。
export AWS_DEFAULT_REGION="ap-northeast-1" export AWS_ACCESS_KEY_ID= export AWS_SECRET_ACCESS_KEY= export AWS_SESSION_TOKEN=
aws s3 ls
などでコンテナから AWS アカウントへアクセスできているか確認できれば問題ありません。
以上で Amazon Genomics CLI の実行環境構築完了です。
テスト用のデモファイル
Amazon Genomics CLI version 1.6.0 のソースコードと一緒にデモ用のサンプルコードが同梱されています。/tmp
配下に残してありますので動作確認の際は/workspace
配下にコピーしてお使い頂ければと思います。
# ll /tmp/amazon-genomics-cli/examples/ total 28K drwxr-xr-x 3 root root 4.0K Dec 29 21:35 demo-cwl-project/ drwxr-xr-x 3 root root 4.0K Dec 29 21:35 demo-nextflow-project/ drwxr-xr-x 3 root root 4.0K Dec 29 21:35 demo-snakemake-project/ drwxr-xr-x 3 root root 4.0K Dec 29 21:35 demo-wdl-project/ drwxr-xr-x 9 root root 4.0K Dec 29 21:35 gatk-best-practices-project/ drwxr-xr-x 8 root root 4.0K Dec 29 21:35 gatk-best-practices-project-miniwdl/ drwxr-xr-x 3 root root 4.0K Dec 29 21:35 nf-core-project/
ちなみにデモ用のサンプルコードは以下のドキュメントで Hello world で動作確認する際に使います。
Hello world | Amazon Genomics CLI
おわりに
Amazon Genomics CLI の実行環境をコンテナで作成しローカル環境を汚さないようにしました。ワークフロー定義はローカル端末で編集し、AWS へデプロイや、ジョブを実行するときはコンテナからagc
コマンドを使うことを想定しています。
# agc workflow run hello --context myContext 2023-03-18T04:25:45Z ? Running workflow. Workflow name: 'hello', InputsFile: '', OptionFile: '', Context: 'myContext' 2a359bd1-248a-433d-84a3-55419a8a1036